package com.example.forum.services;

import com.example.forum.model.Message;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description: 站内信服务层接口
 * User: DELL
 * Date: 2023-09-28
 * Time: 8:55
 */
public interface IMessageService {

    /**
     * 新增站内信
     * 此方法不检验 user id 是否有效
     *
     * @param message 站内信
     */
    void create(Message message);

    /**
     * 根据 userId 查询未读站内信的数量
     *
     * @param userId 接收用户的id
     * @return 未读站内信的数量
     */
    int selectUnreadCount(Long userId);

    /**
     * 根据接收者id查询所有站内信
     *
     * @param receiveUserId 站内信接收者的用户id
     * @return 所有站内信和每一条站内信关联的发送者的信息
     */
    List<Message> selectByReceiveUserId(Long receiveUserId);

    /**
     * 根据站内信 id 更新站内信的状态
     *
     * @param id    站内信 id
     * @param state 更新后的状态
     */
    void updateStateById(Long id, Byte state);

    /**
     * 根据站内信id查询站内信
     *
     * @param id 站内信Id
     * @return
     */
    Message selectById(Long id);

    /**
     * 回复站内信
     *
     * @param repliedId 回复的站内信Id
     * @param message   回复内容
     */
    @Transactional
    void reply(Long repliedId, Message message);

}
